home *** CD-ROM | disk | FTP | other *** search
- /*
- Selection.c
-
- Author: Paul Baxter.
-
- This is a standard selection sort.
-
- Here is how it works:
-
- 1) Start an incrementing loop (index1) from 0 to number of data - 1.
- 2) Init lowest to index1 data item.
- 3) Start an incrementing loop (index2) from index1 + 1 to number of data.
- 4) Compare lowest to index2 data item.
- 5) If index2 data item < lowest then set lowest to index2 data item.
- 6) End index2 loop.
- 7) If lowest != index1 then swap lowest and index1.
- 8) End index1 loop.
- 9) End.
- */
-
- #include "sortdata.h"
-
- void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag);
-
- void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag)
- {
- long lowest, index1, index2, *pindex1, *pindex2, *plowest;
-
- for (pindex1 = sortdata, index1 = 0; index1 < maxdata - 1; index1++, pindex1++) {
- lowest = index1;
- plowest = pindex1;
-
- for (pindex2 = pindex1+1, index2 = index1 + 1; index2 < maxdata; index2++, pindex2++) {
-
- if (*stopflag) {
- return;
- }
-
- if ((*cm)(lowest, index2, *plowest, *pindex2) > 0) {
- plowest = pindex2;
- lowest = index2;
- }
- }
- if (index1 != lowest) {
- (*sw)(index1, lowest, pindex1, plowest);
- }
- }
- }
-